<?php

use Imi\RequestContext;
use Imi\Controller\HttpController;
use Imi\Server\Route\RouteCallable;

class Test extends HttpController
{
    public function abc()
    {
        return $this->response->write('callback2');
    }
}
return [
    // // 传统方式，直接指定控制器、方法、路由，和注解方式比较类似
    // [
    //     'controller'    =>    \ImiDemo\HttpDemo\MainServer\Controller\Test::class,
    //     'method'        =>    'index',
    //     'route'    =>    [
    //         'url'    =>    '/test',
    //         // 'method'    =>    'PUT',
    //         // 'method'    =>    ['GET', 'POST'],
    //         // 'domain'    =>    '{name}.xxx.com',
    //     ],
    //     'middlewares'    =>    [
    //         XXXMiddleware::class,
    //     ],
    // ],

    // // 回调方式，给callback指定一个callable类型
    // [
    //     'route'    =>    [
    //         'url'    =>    '/callback1',
    //     ],
    //     'callback'    =>    function(){
    //         return RequestContext::get('response')->write('callback1');
    //     },
    //     'middlewares'    =>    [
    //         XXXMiddleware::class,
    //     ],
    // ],

    // 路由回调方式，new RouteCallable(类名, 方法名)
    [
        'route'    =>    [
            'url'    =>    '/callback2',
        ],
        'callback'    =>    new RouteCallable('\Test', 'abc'),
        'middlewares'    =>    [
            \ImiDemo\HttpDemo\Middlewares\PoweredBy::class,
        ],
    ],

    // // 匹配URL，把interface代入到类、方法名中
    // [
    //     'controller'    =>    '\ImiDemo\HttpDemo\MainServer\Controller\Test{$interface}',
    //     'method'        =>    '{$interface}',
    //     'route'    =>    [
    //         'url'    =>    '/test/{interface}',
    //     ],
    //     'middlewares'    =>    [
    //         XXXMiddleware::class,
    //     ],
    // ],

    // // 懒人免去写@Controller和@Action注解的麻烦
    // [
    //     'controller'    =>    '\ImiDemo\HttpDemo\MainServer\Controller\{$controller}',
    //     'method'        =>    '{$action}',
    //     'route'    =>    [
    //         'url'    =>    '/{controller}/{action}',
    //     ],
    //     'middlewares'    =>    [
    //         XXXMiddleware::class,
    //     ],
    // ],
];